/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.configuracao.presenter;

import br.com.webhomesites.configuracao.contracts.*;
import br.com.webhomesites.configuracao.model.CidadeModel;
import br.com.webhomesites.configuracao.model.EmpresaModel;
import br.com.webhomesites.configuracao.model.EstadoModel;
import br.com.webhomesites.configuracao.presenter.EmpresaPresenterActionListeners.AlterarActionListener;
import br.com.webhomesites.configuracao.presenter.EmpresaPresenterActionListeners.CancelarActionListener;
import br.com.webhomesites.configuracao.presenter.EmpresaPresenterActionListeners.InserirActionListener;
import br.com.webhomesites.configuracao.presenter.EmpresaPresenterActionListeners.RemoverActionListener;
import br.com.webhomesites.configuracao.presenter.EmpresaPresenterActionListeners.SairActionListener;
import br.com.webhomesites.configuracao.presenter.EmpresaPresenterActionListeners.SalvarActionListener;
import br.com.webhomesites.padrao.utils.Strategy;

/**
 *
 * @author Webhome
 */
public class EmpresaPresenter implements IEmpresaPresenter{
    
    private EmpresaModel empresaModel;     
    private IEmpresaView empresaView;    
    private CidadeModel cidadeModel;
    private EstadoModel estadoModel;
    private IEmpresaDAO empresaDAO;
       
    public final Strategy INSERT_STRATEGY = new InsertStrategy();  
    public final Strategy UPDATE_STRATEGY = new UpdateStrategy();  
    
    private Strategy operacao = INSERT_STRATEGY;
    
    public EmpresaPresenter(EmpresaModel empresaModel, IEmpresaView empresaView, IEmpresaDAO empresaDAO, CidadeModel cidadeModel, EstadoModel estadoModel) {
        this.empresaModel = empresaModel;
        this.empresaView = empresaView;
        this.empresaDAO = empresaDAO;
        this.estadoModel = estadoModel;
        this.cidadeModel = cidadeModel;
    }
    
    @Override
    public void setUpViewListeners() {
        empresaView.setInserirActionListener(new InserirActionListener(this));  
        empresaView.setRemoverActionListener(new RemoverActionListener(this));  
        empresaView.setAlterarActionListener(new AlterarActionListener(this));  
        empresaView.setCancelarActionListener(new CancelarActionListener(this));  
        empresaView.setSalvarActionListener(new SalvarActionListener(this));  
        empresaView.setBtnSairActionListener(new SairActionListener());
    }

    @Override
    public void updateModelFromView() {
        empresaModel.setCodigo(empresaView.getCodigo());  
        empresaModel.setRazaoSocial(empresaView.getRazaoSocial());  
        empresaModel.setCnpj(empresaView.getCnpj());        
        empresaModel.setInscricaoEstadual(empresaView.getInsciacaoEstadual()); 
        empresaModel.setEndereco(empresaView.getEndereco());
        empresaModel.setBairro(empresaView.getBairro());
        empresaModel.setCodigoCidade(cidadeModel.getChaveCidade(empresaView.getCidade()));        
        empresaModel.setCodigoEstado(estadoModel.getChaveEstado(empresaView.getEstado()));        
        empresaModel.setTelefone(empresaView.getTelefone());
        empresaModel.setEmail(empresaView.getEmail());
               
        empresaDAO.inserirEmpresa(empresaModel);
        
        System.out.println("Codigo = " + empresaModel.getCodigo() + "\n" +
                           "Razão Social = " + empresaModel.getRazaoSocial() + "\n" +
                           "Cnpj = " + empresaModel.getCnpj() + "\n" +
                           "Codigo Cidade = " + empresaModel.getCodigoCidade() + "\n" +
                           "Codigo Estadp = " + empresaModel.getCodigoEstado() + "\n" +
                           "Inscrição = " + empresaModel.getInscricaoEstadual() + "\n");    
                
    }

    @Override
    public void updateViewFromModel() {
        if (empresaModel != null) {  
            empresaView.setCodigo(empresaModel.getCodigo());  
            empresaView.setRazaoSocial(empresaModel.getRazaoSocial());  
            empresaView.setCnpj(empresaModel.getCnpj());  
            empresaView.setInscricaoEstadual(empresaModel.getInscricaoEstadual()); 
            empresaView.setBairro(empresaModel.getBairro());    
            empresaView.setTelefone(empresaModel.getTelefone());  
            empresaView.setEmail(empresaModel.getEmail()); 
        }  
        else {  
            empresaView.clearFields();  
        }
    }

    @Override
    public void novoEmpresa() {
        empresaModel = new EmpresaModel();
    }

    @Override
    public void inserirEmpresa() {
        this.updateModelFromView(); 
        empresaView.clearFields();
    }

    @Override
    public void alterarEmpresa() {
        this.updateModelFromView();
    }

    @Override
    public void removerEmpresa() {
         this.updateModelFromView();
    }

    @Override
    public void habilitarEdicao(boolean arg) {
        empresaView.enableTxtEmpresaCodigo(arg);  
        empresaView.enableTxtEmpresaRazaoSocial(arg); 
        empresaView.enableTxtEmpresaCnpj(arg); 
        empresaView.enableTxtEmpresaInscriacaoEstadual(arg);  
        empresaView.enableTxtEmpresaEndereco(arg);
        empresaView.enableTxtEmpresaBairro(arg);
        empresaView.enableTxtEmpresaCidade(arg);
        empresaView.enableTxtEmpresaEstado(arg);
        empresaView.enableTxtEmpresaTelefone(arg);
        empresaView.enableTxtEmpresaEmail(arg);
        
        empresaView.enableBtnCancelar(arg);
        empresaView.enableBtnRemover(arg);
        empresaView.enableBtnSalvar(arg);        
    }

    @Override
    public IEmpresaView getView() {
        return empresaView;
    }
    
    @Override
    public EmpresaModel getModel() {
        return empresaModel;
    }
    
    @Override
    public void setView(IEmpresaView empresaView) {
        this.empresaView = empresaView;
    }

    @Override
    public void setModel(EmpresaModel model) {
        this.empresaModel = model;
    }

    @Override
    public void createView() {
        this.novoEmpresa();            
        this.setUpViewListeners();  
        //this.habilitarEdicao(false);  
        empresaView.removeAllitensComboCidade();
        empresaView.removeAllitensComboEstado();
        empresaView.setCidade(cidadeModel.getListaCidades());
        empresaView.setEstado(estadoModel.getListaEstados());
        empresaView.packAndShow();
    }
   
    public void setOperacao(Strategy operacao) {
        this.operacao = operacao;
    }

    public Strategy getOperacao() {
        return operacao;
    }

    @Override
    public void updateCombosViewFromModel() {
       System.out.println("Update Combos");
       
    }
        
     private class InsertStrategy implements Strategy {  
        @Override
        public void execute() {  
            inserirEmpresa();  
        }  
    }        
      
    private class UpdateStrategy implements Strategy {  
        @Override
        public void execute() {  
            alterarEmpresa();  
        }  
    }   
           
}
